/**     
 * @{#} Service.java Create on 2009-12-25 上午11:26:00    
 * Copyright (c) 2009 by Softdons.com.     
 */
package com.freecsim.sas.core.services;

import com.freecsim.sas.core.exception.InitializeException;
import com.freecsim.sas.core.exception.ServiceStartException;

 /**
 * 
 * <p></p>
 * @version	1.0
 * @author    	老吴
 * @since 		1.6
 */
public interface IService {
	
	/**
	 * 服务配置属性名称-服务名称
	 */
	public static final String ATTRIBUTE_NAME = "name";
	/**
	 * 服务配置属性名称-服务启动顺序
	 */
	public static final String ATTRIBUTE_STARTON = "starton";
	
	/**
	 * 服务状态
	 * @author Georgewu
	 */
	public enum Status{
		/**
		 * 服务状态-停止
		 */
		STATUS_STOP,
		/**
		 * 服务状态-启动中
		 */
		STATUS_STARTING,
		/**
		 * 服务状态-运行中
		 */
		STATUS_RUNNING
	}
	
	/**
	 * 返回服务名称
	 * @return
	 */
	String getName();
	
	/**
	 * 返回服务启动顺序
	 * @return
	 */
	int getStartOn();
	
	/**
	 * 初始化服务
	 * @param properties 服务配置参数
	 * @throws Exception
	 */
	void init(ServiceConfigure config) throws InitializeException;
	
	/**
	 * 返回服务配置
	 * @return
	 */
	ServiceConfigure getServiceConfigure();
	
	
	/**
	 * 启动服务
	 */
	void start() throws ServiceStartException;
	
	/**
	 * 返回当前服务状态
	 * @return
	 */
	Status getStatus();
	
	/**
	 * 设置服务状态
	 * @param status
	 */
	void setStatus(Status status);
	
	/**
	 * 关闭服务
	 */
	void shutdown();
}
